package com.thinkgem.jeesite.modules.ta.util;

import java.rmi.RemoteException;

import javax.servlet.http.HttpServletRequest;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

public class WebServiceUtil {

	public static String invokeRemoteFuc(String wid, String userId,
			String ownerName, HttpServletRequest request) {
		String endpoint = GetWebServicePathUtil.getWebPath(request);

		String result = "no result!";
		Service service = new Service();
		Call call;
		Object[] object = new Object[3];
		object[0] = wid;// Object是用来存储方法的参数
		object[1] = userId;// Object是用来存储方法的参数
		object[2] = ownerName;// Object是用来存储方法的参数
		try {
			call = (Call) service.createCall();

			call.setTargetEndpointAddress(endpoint);// 远程调用路径
			// call.setOperationName("NewInstace");// 调用的方法名
			call.setOperationName(new QName("http://tempuri.org/", "NewInstace")); // 调用的方法名
			call.setSOAPActionURI("http://tempuri.org/NewInstace");

			// 设置参数名:
			// 没有参数必须写一个
			call.addParameter(new QName("http://tempuri.org/", "wid"), // 参数名
					XMLType.XSD_STRING,// 参数类型:String
					ParameterMode.IN);// 参数模式：'IN' or 'OUT'
			call.addParameter(new QName("http://tempuri.org/", "userId"), // 参数名
					XMLType.XSD_STRING,// 参数类型:String
					ParameterMode.IN);// 参数模式：'IN' or 'OUT'
			call.addParameter(new QName("http://tempuri.org/", "ownerName"), // 参数名
					XMLType.XSD_STRING,// 参数类型:String
					ParameterMode.IN);// 参数模式：'IN' or 'OUT'
			// 设置返回值类型：
			call.setReturnType(XMLType.XSD_STRING);// 返回值类型：String

			result = (String) call.invoke(object);// 远程调用
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		System.out.println(result);
		return result;
	}

	public static String invokeRemoteFuc(String iid, HttpServletRequest request) {
		String endpoint = GetWebServicePathUtil.getWebPath(request);

		String result = "no result!";
		Service service = new Service();
		Call call;
		Object[] object = new Object[1];
		object[0] = iid;// Object是用来存储方法的参数
		try {
			call = (Call) service.createCall();

			call.setTargetEndpointAddress(endpoint);// 远程调用路径
			// call.setOperationName("NewInstace");// 调用的方法名
			call.setOperationName(new QName("http://tempuri.org/",
					"DeleteInstance")); // 调用的方法名
			call.setSOAPActionURI("http://tempuri.org/DeleteInstance");

			// 设置参数名:
			// 没有参数必须写一个
			call.addParameter(new QName("http://tempuri.org/", "iids"), // 参数名
					XMLType.XSD_STRING,// 参数类型:String
					ParameterMode.IN);// 参数模式：'IN' or 'OUT'

			// 设置返回值类型：
			call.setReturnType(XMLType.XSD_STRING);// 返回值类型：String

			result = (String) call.invoke(object);// 远程调用
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		System.out.println(result);
		return result;
	}

	public static byte[] attService(String aid, HttpServletRequest request) {
		String endpoint = GetWebServicePathUtil.getAttPath(request);

		byte [] b = null;
		Service service = new Service();
		Call call;
		Object[] object = new Object[1];
		object[0] = aid;// Object是用来存储方法的参数
		try {
			call = (Call) service.createCall();

			call.setTargetEndpointAddress(endpoint);// 远程调用路径
			// call.setOperationName("NewInstace");// 调用的方法名
			call.setOperationName(new QName("http://tempuri.org/",
					"DownLoadBLOBStream")); // 调用的方法名
			call.setSOAPActionURI("http://tempuri.org/DownLoadBLOBStream");

			// 设置参数名:
			// 没有参数必须写一个
			call.addParameter(new QName("http://tempuri.org/", "aid"), // 参数名
					XMLType.XSD_STRING,// 参数类型:String
					ParameterMode.IN);// 参数模式：'IN' or 'OUT'

			// 设置返回值类型：
			call.setReturnType(XMLType.SOAP_BASE64BINARY);// 返回值类型：String

			b = (byte[]) call.invoke(object);// 远程调用
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		
		return b;
	}
	public static String ins(String strIID, HttpServletRequest request) {
		String endpoint = GetWebServicePathUtil.getWebPath(request);

		String result = "no result!";
		Service service = new Service();
		Call call;
		Object[] object = new Object[1];
		object[0] = strIID;// Object是用来存储方法的参数
		try {
			call = (Call) service.createCall();

			call.setTargetEndpointAddress(endpoint);// 远程调用路径
			// call.setOperationName("NewInstace");// 调用的方法名
			call.setOperationName(new QName("http://tempuri.org/",
					"ReturnTaskFromComplete")); // 调用的方法名
			call.setSOAPActionURI("http://tempuri.org/ReturnTaskFromComplete");

			// 设置参数名:
			// 没有参数必须写一个
			call.addParameter(new QName("http://tempuri.org/", "strIID"), // 参数名
					XMLType.XSD_STRING,// 参数类型:String
					ParameterMode.IN);// 参数模式：'IN' or 'OUT'

			// 设置返回值类型：
			call.setReturnType(XMLType.XSD_STRING);// 返回值类型：String

			result = (String) call.invoke(object);// 远程调用
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		System.out.println(result);
		return result;
	}
}
